package com.easylinkin.linkappapi.lobar.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.easylinkin.linkappapi.lobar.dto.UserCountByProjectDTO;
import com.easylinkin.linkappapi.lobar.dto.UserCountByWorkDTO;
import com.easylinkin.linkappapi.lobar.dto.UserProjectDTO;
import com.easylinkin.linkappapi.lobar.dto.region.UserRegionDTO;
import com.easylinkin.linkappapi.lobar.entity.UserProject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.easylinkin.linkappapi.lobar.vo.UserProjectVo;
import java.util.List;

import com.easylinkin.linkappapi.taskscheduler.entity.UserAreaDTO;
import org.apache.ibatis.annotations.Param;

/**
 * <p>
 * 用户项目表 Mapper 接口
 * </p>
 *
 * @author kanyuanfeng
 * @since 2022-04-13
 */
public interface UserProjectMapper extends BaseMapper<UserProject> {

  IPage<UserProjectDTO> queryListByPage(Page page, @Param("userProject") UserProjectDTO userProjectDTO);

  /**
   * 查询闸机下绑定的用户
   * @return
   */
  IPage<UserProjectDTO> findUserGate(Page page, @Param("userProject") UserProject userProject);


  List<UserProject> selectByConfig(@Param("tenantId") String tenantId, @Param("absent") Integer absent);

  /**
   * @Description: 人员统计
   * @author kan yuanfeng
   * @date 2020/11/04 11:42
   */
  List<UserProjectDTO> countUser2(@Param("tenantId") String tenantId,@Param("buildTypes") List<String> buildTypes,@Param("companyId") String companyId);

  /**
   * @Description: 人员统计
   * @author kan yuanfeng
   * @date 2020/11/04 11:42
   */
  List<UserProjectDTO> countUser(@Param("tenantId") String tenantId,@Param("buildTypes") List<String> buildTypes);

  //查询所有人员数据
  List<UserProjectDTO> selectAll(String tenantId);

  /**
   * 根据条件查询人员信息Dtolist
   * @param userProjectVo 条件vo
   * @return 人员信息Dtolist
   */
  List<UserProjectDTO> queryUserProjectDtoList(UserProjectVo userProjectVo);

  /**
   * 通过身份证号码查询对应的人员
   * @param card
   * @return
   */
  List<UserProjectDTO> findByCard(String card);

  List<UserProject> selectByCard(@Param("card") String card);

  List<UserProject> getRecordByWorkType(@Param("tenantId") String tenantId, @Param("workType") String workType);

  UserProjectDTO findById(String id);

  UserProjectDTO findByUserId(@Param("userId") String userId, @Param("tenantId") String tenantId);

  List<UserProjectDTO> findByGateId(String gateId);

  List<UserProjectDTO> findByCardOrGateId(String cardOrGateId);

  List<UserProjectDTO> findByCardOrGateIdToDock(String cardOrGateId);

  /**
   * 根据条件统计数量
   * @param userProject 条件对象
   * @return 数量
   */
    Integer countUserNumBy(UserProject userProject);

   List<UserProjectDTO> findNewJoin(@Param("tenantId")String tenantId, @Param("size") int i);

  /**
   * 根据班组id查询班组人员数量
   *
   * @param groupId 班组id
   * @return 班组人员数量
   */
  int countUserNumByGroupId(UserProject userProject);

  List<UserRegionDTO> findUserRegionByIds(@Param("tenantId")String tenantId, @Param("ids") List<Long> ids);

  /**
   * 跟上面接口不一样，这个只查询userID
   * @param tenantId
   * @param ids
   * @return
   */
  List<UserRegionDTO> findUserRByIds(@Param("tenantId")String tenantId, @Param("ids") List<Long> ids);

  List<UserProjectDTO> findByTenantId(String tenantId);

  List<UserProjectDTO> findByTenantId2(@Param("queryParams") UserProjectDTO queryParams);

  /**
   * 按参建单位查询
   * @return
   */
  List<UserProjectDTO> findByCompany();

  List<UserProjectDTO> findByGateLinkId(Integer id);

  /**
   * 查询当天进场人数
   * @param tenantId
   * @return
   */
  List<UserProjectDTO> findOnByTenantId2(@Param("queryParams") UserProjectDTO queryParams);

  IPage<UserProjectDTO> queryEnListByPage(Page page, @Param("userProject") UserProjectDTO userProjectDTO);

  /**
   * 企业级查询
   * @param userProjectDTO
   * @return
   */
  List<UserProject> countAllByEnterprise(UserProjectDTO userProjectDTO);

  /**
   * 查询当天在场人数
   * @param userProjectDTO
   * @return
   */
  int countInToday(UserProjectDTO userProjectDTO);

  IPage<UserProjectDTO> queryBlackListByPage(Page page, @Param("userProject") UserProjectDTO userProjectDTO);

  /**
   * 统计在场情况
   * @param tenantId
   * @param buildTypes
   * @return
   */
  List<UserProjectDTO> getOnArea(@Param("tenantId") String tenantId, @Param("buildTypes") List<String> buildTypes);

  IPage<UserProjectDTO> onAreasList(Page page, @Param("dto") UserProjectDTO userProjectDTO);

  /**
   * 人员统计 根据项目
   * @param companyId 企业id
   * @return 人员统计
   */
  List<UserCountByProjectDTO> listUserCountByProject(@Param("companyId") String companyId);

  /**
   * 人员统计 根据工种
   *
   * @param companyId 企业id
   * @return 人员统计
   */
  List<UserCountByWorkDTO> listUserCountByWork(@Param("companyId") String companyId);

  void updateAreaByTenantId(@Param("userAreaDTO") UserAreaDTO userAreaDTO);

  List<UserProjectDTO> queryUserProjectDtoList1(UserProjectVo userProjectVo);

}
